package com.icrazy.platform.util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * 公共方法
 * 
 * @author xiaofeng
 * @version 2012-2-6
 */
@SuppressWarnings("rawtypes")
public class Ts {

	/**
	 * 是否有值
	 * 
	 * @param rs
	 * @return boolean
	 */
	public static boolean hv(String rs) {
		return rs != null;
	}

	/**
	 * 是否有值
	 * 
	 * @param rs
	 * @return boolean
	 */
	public static boolean hv(Integer rs) {
		return rs != null;
	}

	/**
	 * 是否有值
	 * 
	 * @param rs
	 * @return boolean
	 */
	public static boolean hv(Long rs) {
		return rs != null;
	}

	/**
	 * 是否有值
	 * 
	 * @param str
	 * @return boolean
	 */
	public static boolean hv(String[] str) {
		return str != null && str.length > 0;
	}

	/**
	 * 是否有值
	 * 
	 * <h1>注意：如果list的第一个元素是null那么返回false</h1>
	 * 
	 * @param list
	 * @return boolean
	 */
	public static boolean hv(List list) {
		if (list != null && list.size() > 0) {
			if (hv(list.get(0))) {
				return true;
			}
		}
		return false;
	}

	/**
	 * 是否有值
	 * 
	 * @param obj
	 * @return boolean
	 */
	public static boolean hv(Object obj) {
		return obj != null;
	}

	/**
	 * 是否有值
	 * 
	 * <h1>注意：该方法主要用于判断多个参数同时不为null时才用</h1> <h2>
	 * 用法:Scm.hv(obj1,obj2,obj3,...,args)</h2>
	 * 
	 * @param obj
	 *            参数1
	 * @param args
	 *            参数列表
	 * @return boolean
	 */
	public static boolean hv(Object obj, Object... args) {
		if (!hv(obj)) {
			return false;
		}
		for (Object arg : args) {
			if (!hv(arg)) {
				return false;
			}
		}
		return true;
	}

	/**
	 * 是否相等
	 * 
	 * <h1>注意：src,dest其中一个值不为null</h1> <h2>用法:Scm.eq(null,1); Scm.eq(1,2);
	 * Scm.eq(2,null);等</h2>
	 * 
	 * @param src
	 *            源字符串
	 * @param dest
	 *            目标字符串
	 * @return boolean
	 */
	public static boolean eq(Object src, Object dest) {
		return hv(src) ? src.equals(dest) : dest.equals(src);
	}

	/**
	 * 转换成String
	 * 
	 * @param obj
	 * @return String
	 */
	public static String ts(Object obj) {
		return hv(obj) ? String.valueOf(obj) : "";
	}

	/**
	 * 转换成Integer
	 * 
	 * @param rs
	 * @return Integer
	 */
	public static Integer ti(String rs) {
		return hv(rs) ? Integer.parseInt(rs) : null;
	}

	/**
	 * 转换成Integer
	 * 
	 * @param rs
	 * @return Integer
	 */
	public static Integer ti(Object rs) {
		return hv(rs) ? Integer.parseInt(rs.toString()) : null;
	}

	/**
	 * 转换成Double
	 * 
	 * @param rs
	 * @return Double
	 */
	public static Double td(String rs) {
		return hv(rs) ? Double.parseDouble(rs) : null;
	}

	/**
	 * 转换成Long
	 * 
	 * @param str
	 * @return Long
	 */
	public static Long tl(String str) {
		return hv(str) ? Long.parseLong(str) : null;
	}

	/**
	 * 转换成Long
	 * 
	 * @param i
	 * @return Long
	 */
	public static Long tl(Integer i) {
		return hv(i) ? Long.valueOf(i) : null;
	}

	/**
	 * Exception输出
	 * 
	 * @param e
	 */
	public static void pe(Exception e) {
		e.printStackTrace();
	}

	/**
	 * 日期格式
	 * 
	 * @param date
	 * @return String
	 */
	public static String fd(Date date) {
		return hv(date) ? new SimpleDateFormat("yyyy-MM-dd").format(date) : null;
	}

	/**
	 * 日期格式
	 * 
	 * @param date
	 * @param args
	 * @return String
	 */
	public static String fd(Date date, String args) {
		return hv(date) ? new SimpleDateFormat(args).format(date) : null;
	}

	/**
	 * 返回list.size()
	 * 
	 * @param list
	 * @return Integer
	 */
	public static Integer ls(List list) {
		return hv(list) ? list.size() : 0;
	}

	/**
	 * 循环输出
	 * 
	 * @param cb
	 * @param num
	 */
	public static void out(CallBack cb, int num) {
		try {
			if (num != 0) {
				long rs = 0;
				for (int i = 0; i < num; i++) {
					String message = "";
					long startTime = System.nanoTime();
					cb.run();
					long estimatedTime = System.nanoTime() - startTime;
					rs += estimatedTime;
					message = "相差(用时):" + estimatedTime + "纳秒," + estimatedTime / 1000000000 + "秒";// 1秒=10亿纳秒
					System.out.println(message);
				}
				System.out.println("---------------循环 " + num + " 次------------------");
				System.out.println("平均(用时):" + (rs / num) + "纳秒," + (rs / num) / 1000000000 + "秒");
			} else {
				String message = "";
				long startTime = System.nanoTime();
				cb.run();
				long estimatedTime = System.nanoTime() - startTime;
				message = "相差(用时):" + estimatedTime + "纳秒," + estimatedTime / 1000000000 + "秒";// 1秒=10亿纳秒
				System.out.println(message);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 输出
	 * 
	 * @param cb
	 */
	public static void out(CallBack cb) {
		try {
			out(cb, 0);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * POSTFIX连接
	 * 
	 * @param id
	 * @param postfix
	 * @return String
	 */
	public static String postFix(String id, String postfix) {
		if (id.indexOf(".") > 0) {
			return id;
		} else {
			return id + postfix;
		}
	}
}
